const db = require('../../db/sql')
const {delay} = require('../../utils/delay')
const knex = require("../../db/knex");

async function selectMenu(res, roleId) {
//     //#region  普通查询菜单
//     let sql = `select * from menulist`
//     db.query(sql, (err, res1) => {
//         if (err) {
//             console.log(err)
//             res.send({
//                 code: 304,
//                 msg: '查询失败'
//             })
//         } else {
//             //方式2
//             // 处理后的数据
//             const processedData = [];
// // 将所有对象的rank_id作为key，值为该对象，并将parent_id存在的对象添加到其对应的parent_id的children数组中
//             res1.forEach((data, index, res1) => {
//                 const {rank_id, parent_id} = data;
//                 // console.log(data,'请求')
//                 if (parent_id) {
//                     // 找到该对象的父级节点
//                     const parent = res1.find(item => item.rank_id == parent_id);
//                     // console.log( parent_id,'服务')
//                     if (!parent.hasOwnProperty('children')) {
//                         // 如果父级节点没有children属性，则添加一个空数组
//                         parent.children = [];
//                     }
//                     // 将该对象添加到父级节点的children数组中
//                     parent.children.push(data);
//                 } else {
//                     // 如果parent_id不存在，则直接将该对象添加到processedData数组中
//                     processedData.push(data);
//                 }
//             });
//
//             res.status(201).send({
//                 // resultArray,
//                 processedData
//             })
//         }
//
//     })
//     //#endregion

    //根据用户权限查询菜单
    await knex.transaction(async trx => {
        let processedData = [];
        //先获取该用户每一个菜单唯一id
        let rankIdArr = await trx('role_permission').select('rank_id').where({role_id: roleId})
        //获取所有菜单信息
        let menuInfo = await trx('origin_menu_list').select('*')
        let newArr = []
        rankIdArr.forEach((o, i) => {
            menuInfo.forEach((os, ia) => {
                if (os.rank_id == o.rank_id) {
                    newArr.push(os)
                }
            })
        })
        console.log('快没了', newArr)
        newArr.forEach((data, i, newArr) => {
            const {rank_id, parent_id} = data;
            // console.log(data,'请求')
            if (parent_id) {
                // 找到该对象的父级节点
                const parent = newArr.find(item => item.rank_id == parent_id);
                console.log(parent, '服务', parent_id)
                if (!parent.hasOwnProperty('children')) {
                    // 如果父级节点没有children属性，则添加一个空数组
                    parent.children = [];
                }
                // 将该对象添加到父级节点的children数组中
                parent.children.push(data);
            } else {
                // 如果parent_id不存在，则直接将该对象添加到processedData数组中
                processedData.push(data);
            }
        })
        console.log(processedData, '什么情况')
        processedData.forEach((o, i) => {
            o.children.forEach((os, ia) => {
                os.path_name = o.path_name + '/' + os.path_name
            })
        })
        res.status(201).send({
            processedData
        })
    })
}

async function selectMenuListToShow(res) {
    let processedData = [];
    //获取所有菜单信息
    await knex.transaction(async trx => {
        let menuId = await trx('menulist').select('rank_id')
        let menuInfo = await trx('menulist').select('*')
        let newArr = []
        menuId.forEach((o, i) => {
            menuInfo.forEach((os, ia) => {
                if (os.rank_id == o.rank_id) {
                    newArr.push(os)
                }
            })
        })
        console.log('快没了', newArr)
        newArr.forEach((data, i, newArr) => {
            const {rank_id, parent_id} = data;
            // console.log(data,'请求')
            if (parent_id) {
                // 找到该对象的父级节点
                const parent = newArr.find(item => item.rank_id == parent_id);
                console.log(parent, '服务', parent_id)
                if (!parent.hasOwnProperty('children')) {
                    // 如果父级节点没有children属性，则添加一个空数组
                    parent.children = [];
                }
                // 将该对象添加到父级节点的children数组中
                parent.children.push(data);
            } else {
                // 如果parent_id不存在，则直接将该对象添加到processedData数组中
                processedData.push(data);
            }
        })
        console.log(processedData, '什么情况')
        processedData.forEach((o, i) => {
            o.children.forEach((os, ia) => {
                os.path_name = o.path_name + '/' + os.path_name
            })
        })
        res.status(201).send({
            processedData
        })
    })

}

module.exports = {selectMenu, selectMenuListToShow}
